package br.net.atasacramental.certificado.model;
import java.util.Date;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="CERTIFICADO")
public class Certificado{

	@Id 
	@GenericGenerator(name="seq_certificado" , strategy="increment")
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_certificado")	 
	@Column(name="ID_CERTIFICADO")
	private int idCertificado;
	@Column(name="VALIDADE")
	private Date validade;
	@Column(name="PIN")
	private String pin;        
    private String puk="";
	private String tokken="";        
        
	public Certificado(){
		super();
	}
	public int getIdCertificado(){
		return this.idCertificado;
	}
	public void setIdCertificado(int idCertificado){
		this.idCertificado = idCertificado;
	}	
	public Date getValidade(){
		return this.validade;
	}
	public void setValidade(Date validade){
		this.validade = validade;
	}	
	public String getPin(){
		return this.gerarToken(this.pin);
	}
	public void setPin(String pin){
		this.pin = pin;
	}	
        
    public String getPuk() {
		return puk;
	}
	public void setPuk(String puk) {
		this.puk = puk;
	}
	
    public String gerarToken(String chave){
    	MessageDigest md = null;
		try {
			md = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}  
        BigInteger hash = new BigInteger(1, md.digest(chave.getBytes()));  
        String s = hash.toString(16);  
        if (s.length() %2 != 0){ 
            s = "0" + s;  
        }
        return s;    	
    }
    public String getTokenGerado(){    	
    	//String tk = this.gerarToken(this.getPuk()+this.getPin()+this.getValidadeFormatada());
    	return this.gerarToken(this.getPuk()+this.getPin());
    }
    public String getValidadeFormatada(){
    	SimpleDateFormat dform = new SimpleDateFormat("dd_MM_yyyy");  
    	return dform.format(this.getValidade());
    }
    public Boolean autenticar(Certificado cert){
    	this.setPuk(cert.getPuk());    	
    	if(this.getTokenGerado().equals(cert.getTokken())){
    		return true;
    	}
    	return false;
    }
	public String getTokken() {
		return tokken;
	}
	public void setTokken(String tokken) {
		this.tokken = tokken;
	}
        
        
        
}
